chore(spec): metadata-liveness P2 follow-through — mark aspirational props experimental + declare renderer-read props (#1878)#3223
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
📓 Docs Drift CheckThis PR changes 1 package(s): 102 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
os-zhuang
marked this pull request as ready for review
July 18, 2026 15:18
…read props (#1878) Metadata-liveness audit follow-through (umbrella #1878). Resolves the unambiguous framework-spec portions of the open P2 sub-issues. #1893 (aspirational config — prune or mark experimental): add [EXPERIMENTAL — not enforced] markers to properties that parse but have no runtime consumer, so authors are not misled (ADR-0049): - object enable.trash / enable.mru (ledger dead -> experimental) - job retryPolicy / timeout - theme spacing / breakpoints / rtl / density / touchTarget - translation messageFormat:'icu' / cache - webhook authentication (non-HMAC bearer/basic/api-key) - PortalSchema (entire — not registered, no route/renderer) #1891 / #1894 (naming drift + inverse drift — app cluster): declare the props the objectui renderers already read so a strict Schema.parse() holds: - app branding accentColor (ConsoleLayout) - nav item badgeVariant (NavigationRenderer) - nav item `separator` type (AppContent nav divider) - agent knowledge.sources as the canonical key, topics kept as deprecated alias Regenerated reference docs (content/docs/references) to match. All spec gates green: check:liveness, check:docs, check:spec-changes; full spec suite 6763 passing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LddW4NaQBdf5FTEnBPpnUJ
…uthor-lint) The author-side liveness lint (lintLivenessProperties, #1966) auto-warns on every `experimental` prop. enable.trash / enable.mru default to `true`, and the lint cannot distinguish an authored `true` from the schema default — so tagging them experimental warned on the default value of every object, tripping the "does NOT warn on a default-on flag left alone (enable.trash)" contract test in Test Core. Revert those two to `dead` (their audit classification) with a ledger note explaining why; drop the [EXPERIMENTAL] marker from their spec .describe(). Their #1893 disposition (prune-or-build) stays tracked in the sub-issue. All other #1893 experimental markers are on ungoverned types the lint never loads, so they are unaffected. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LddW4NaQBdf5FTEnBPpnUJ
…on entry point (#1892) #1892 tool disposition (ADR-0049 line): the ledger already documents that tool metadata is a one-way, write-only projection (no executor loads a metadata-authored tool; the runtime uses a separate AIToolDefinition in cloud service-ai). Surface that on the SPEC itself so an author/AI reading the Zod schema — not just the ledger — knows a hand-authored tool will not run in the open edition. Non-breaking describe-only change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LddW4NaQBdf5FTEnBPpnUJ
os-zhuang
force-pushed
the
claude/metadata-property-liveness-audit-sj47n1
branch
from
July 18, 2026 15:42
d55c442 to
2f05725
Compare
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-through on the metadata-liveness audit umbrella #1878 (reopened). After re-evaluating every open sub-issue against the current code, this PR lands the unambiguous framework-spec portions of the open P2 hygiene issues — the changes that are localized to
packages/specand provable by the existing gates.#1893 — Aspirational config: mark experimental (ADR-0049)
Properties that parse but have no runtime consumer now carry an
[EXPERIMENTAL — not enforced]marker in their.describe(), so authors (andobjectstack compile) are not misled into thinking they take effect:enable.trash,enable.mru(ledgerdead → experimental)retryPolicy,timeoutspacing,breakpoints,rtl,density,touchTargetmessageFormat:'icu',cacheauthentication(non-HMAC bearer/basic/api-key)PortalSchema— not registered as a metadata type, no route/renderer#1891 + #1894 — Naming drift & inverse drift (app cluster)
Declare the props the objectui renderers already read, so a strict
Schema.parse()holds instead of silently stripping renderer-needed keys:accentColor(read byConsoleLayout)badgeVariant(read byNavigationRenderer)separatortype (read byAppContentas a nav divider)knowledge.sourcespromoted to the canonical key (the renderer readssources);knowledge.topicskept as a deprecated aliasTesting / gates
check:liveness✅ — all governed-type properties classifiedcheck:docs✅ — 253 generated reference files regenerated & in sync (content/docs/references)check:spec-changes✅ — up to dateNot in this PR (deferred — need a maintainer design decision, tracked in the sub-issues)
component/data/rowField/columnFieldand viewObjectViewform-adapter keys — resolving these means deciding whether each is legitimately authorable (declare) or a renderer-internal escape hatch (drop the renderer dep);dataset/valuesbeing required by ADR-0021 makes a blanket declaration wrong. Left for an explicit call.🤖 Generated with Claude Code
https://claude.ai/code/session_01LddW4NaQBdf5FTEnBPpnUJ
Generated by Claude Code